Put_page on vmx_set_cr0 for multiple protected/real mode switch.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 20 Sep 2005 13:07:10 +0000 (13:07 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 20 Sep 2005 13:07:10 +0000 (13:07 +0000)
Signed-off-by: Yunhong Jiang <yunhong.jiang@intel.com>
Signed-off-by: Chengyuan Li <chengyuan.li@intel.com>
xen/arch/x86/vmx.c

index c6705b15f0bbfec028b3acbcf16210fa65fbe3bb..da1016cf92aec650d76107028a5c13dd6cf626cf 100644 (file)
@@ -1100,6 +1100,11 @@ static int vmx_set_cr0(unsigned long value)
                     d->arch.arch_vmx.cpu_cr3, mfn);
     }
 
+    if(!((value & X86_CR0_PE) && (value & X86_CR0_PG)) && paging_enabled)
+        if(d->arch.arch_vmx.cpu_cr3)
+            put_page(pfn_to_page(get_mfn_from_pfn(
+                      d->arch.arch_vmx.cpu_cr3 >> PAGE_SHIFT)));
+
     /*
      * VMX does not implement real-mode virtualization. We emulate
      * real-mode by performing a world switch to VMXAssist whenever